package com.noble.meether.push;

import com.noble.glamour.bean.center.user.detail.UserDetail;
import com.noble.glamour.module.logic.application.App;
import com.noble.glamour.module.logic.application.ModuleMgr;
import com.noble.library.log.PLogger;
import com.noble.library.observe.ModuleBase;
import com.noble.meether.fragment.rob.util.RobUtil;

import java.util.HashSet;
import java.util.Set;

import cn.jpush.android.api.JPushInterface;

/**
 * 推送工具
 * <p>
 * 6001   无效的设置，tag/alias 不应参数都为 null
 * 6002   设置超时    建议重试
 * 6003   alias 字符串不合法    有效的别名、标签组成：字母（区分大小写）、数字、下划线、汉字。
 * 6004   alias超长。最多 40个字节    中文 UTF-8 是 3 个字节
 * 6005   某一个 tag 字符串不合法  有效的别名、标签组成：字母（区分大小写）、数字、下划线、汉字。
 * 6006   某一个 tag 超长。一个 tag 最多 40个字节  中文 UTF-8 是 3 个字节
 * 6007   tags 数量超出限制。最多 100个 这是一台设备的限制。一个应用全局的标签数量无限制。
 * 6008   tag/alias 超出总长度限制。总长度最多 1K 字节
 * 6011   10s内设置tag或alias大于3次 短时间内操作过于频繁
 */
public class PushMgr implements ModuleBase {
    private static String _FRONT = "front";
    private static String _BACK = "back";

    private static String MALE = "male";
    private static String FEMALE = "female";

    // 抢聊开关Tag
    private static String ROB_OPEN = "robOpen";
    private static String ROB_CLOSE = "robClose";

    private Set<String> tagSet;    // Tag集合

    @Override
    public void init() {
        initPush();
    }

    @Override
    public void release() {
    }

    private void initPush() {
        initJPush();
    }

    /**
     * 极光推送
     */
    private void initJPush() {
        JPushInterface.setDebugMode(false);    // 设置开启日志,发布时请关闭日志
        JPushInterface.init(App.getContext());            // 初始化 JPush
    }

    /**
     * 停止推送服务
     */
    public void stopPush() {
        JPushInterface.stopPush(App.getContext());
    }

    /**
     * 重新接收推送
     */
    public void resumePush() {
        JPushInterface.resumePush(App.getContext());
    }

    /**
     * 以用户id做tag设置给JPush
     * <p>
     * alis: string     tag : set集合
     * <p>
     * uid: alias     前后台： tag
     */
    public void setJPushAlias(long uid) {
        JPushInterface.setAlias(App.getContext(), 1, String.valueOf(uid));
    }

    /**
     * 更新前后台tag
     */
    public void resetJPushTag(boolean isFront) {
        UserDetail userDetail = ModuleMgr.getCenterMgr().getMyInfo();
        tagSet = new HashSet<>();
        String tag = isFront ? _FRONT : _BACK;
        tagSet.add(tag);
        if (userDetail != null) {
            tagSet.add(userDetail.isMan() ? MALE : FEMALE);
        }
        boolean switchStatus = RobUtil.getInstance().getRobNotice();
        tagSet.add(switchStatus ? ROB_OPEN : ROB_CLOSE);
        JPushInterface.setTags(App.getContext(), tagSet, (i, s, set) -> PLogger.d("JPushTags------reset::::  " + i + ", " + s + ", " + set.toString()));
    }

    /**
     * 更新抢聊通知tag
     */
    public void resetRobTag(boolean isNotice) {
        UserDetail userDetail = ModuleMgr.getCenterMgr().getMyInfo();
        tagSet = new HashSet<>();
        tagSet.add(_FRONT);
        if (userDetail != null) {
            tagSet.add(userDetail.isMan() ? MALE : FEMALE);
        }
        tagSet.add(isNotice ? ROB_OPEN : ROB_CLOSE);
        RobUtil.getInstance().setRobNotice(isNotice);
        JPushInterface.setTags(App.getContext(), tagSet, (i, s, set) -> PLogger.d("JPushTags-----resetRob::::  " + i + ", " + s + ", " + set.toString()));
    }
}
